<div dir="ltr">Hi:<div><br></div><div>Just remember that in NCL a variable that is V(x,y) in WRF output is V(y,x) in NCL.  However, in the WRAPIT program, you use V(X,Y).</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 14, 2018 at 7:23 PM, Michael Toy <span dir="ltr"><<a href="mailto:toy@ucar.edu" target="_blank">toy@ucar.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi Dennis,<div><br></div><div>Thank you for your help.  I understand now to keep things “Fortran 77” in terms of what WRAPIT processes.  In this spirit, I changed my f90 program from a module to just a subroutine by eliminating the “module” statements, and just leaving “mult.f90” as:</div><span class=""><div><br></div><div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">subroutine mult(x,y,z)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">implicit none</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">real, intent(in) :: x,y</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">real, intent(out) :: z</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">z = x*y</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">end subroutine mult</span></div></div><div><br></div></span><div>Using the same mult.stub file as before, a mult.so file is created and is readable by the NCL — external MLT “./mult.so” — command, and executes just fine.  Hopefully this will work for the actual Fortran code I’m hoping to execute from NCL, which is a WRF physics module (which I won’t call a module for the purposes of WRAPIT).</div><div><br></div><div>Thanks again.</div><div><br></div><div>Best regards,</div><div>Mike</div><div><br></div><div><br></div><div><br></div><div><br><div><blockquote type="cite"><div><div class="h5"><div>On May 13, 2018, at 8:27 AM, Dennis Shea <<a href="mailto:shea@ucar.edu" target="_blank">shea@ucar.edu</a>> wrote:</div><br class="m_8984324537255978221Apple-interchange-newline"></div></div><div><div><div class="h5"><div dir="ltr"><div><div><div><div><div><div><div><div>Hello,<br><br></div>Once a function/subroutine is placed in a module, two 'things' must be done:<br><br></div>[1] A module must be compiled <b>prior</b> to its invocation by other program units<br></div>[2] The program unit(s) invoking the function/subroutine contained within a module must apply the USE statement.<br><br></div>Attached are two fortran codes. Note the module is compiled 1st. <br></div><div>Also, a side point, these could be in one file as long as the module is compiled prior to other units. <br></div><div><br></div>%> gfortran toy_module.f90 test.toy_module.f90<br></div>%> ./a.out<br><br> z=   6.8999996<br><br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<wbr>%<br><br></div>Likely, you already know the above .<br>However, I thought it should be mentioned for others who might want to do something similar to what you are doing.<br><br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<wbr>%<br><br></div>OK ... how to accommodate using a subroutine contained within a module from NCL.<br><div><div><div><div><div><div><div><div><div><div><div><br>[1] *THE* issue is that NCL's  WRAPIT  understands only f77 syntax. <br>[2] The  'USE' statement is f90. Further, it must/should appear even before an 'implicit none' statement.<br></div><div>[3] WRAPIT would likely fail (untested if this is true) if the USE statement were encountered between the 'C NCLFORTSTART' and 'C NCLEND' delimiters.<br></div><div>[4] My opinion is that you must add a 2nd subroutine ... a bit of a nuisance. <br><br>---<br>In the following, the 77 and 90 suffixes are used to differentiate the program subroutines. They have no language meaning.<br><br>The 1st subroutine [mult77]  contains the WRAPIT recognized delimiters:  'C NCLFORTSTART' and 'C NCLEND'.  WRAPIT will create the necessary infrastructure for argument passing between arguments between NCL  (written in C) and fortran.<br><br></div><div>The 2nd subroutine is a valid program unit invokes the 'USE' statement. <br><br></div><div>Again, the USE statement could not be simply added to the 1st subroutine because WRAPIT would not know what to do with it!<br></div><div><br>C NCLFORTSTART<br>      subroutine<b> mult77</b>(x,y,z)<br></div><div>      implicit none<br></div><div>      real x,y,z<br>C NCLEND<br>      call <b>mult90</b>(x,y,z)<br>      return<br>      end<br>C------------<br>      subroutine <b>mult90</b>(x,y,z)<br>      <b>use module_mult</b><br>      implicit none<br>      real, intent(in)  :: x,y<br>      real, intent(out) :: z<br><br>      call <b>mult</b>(x,y,z)<br>      return<br>      end<br><br>================<br></div><div>Test the NCL call to invoke the module. Note the module is compiled 1st.<br><br>%> <b>WRAPIT</b> toy_module.f90 toy_mult7790.f<br></div><div><br></div><div>This will create '<b>toy_module.so</b>'<br><br></div><div>The following 'toy_test.ncl' contains:<br><br>external TOY_MODULE "./toy_module.so"<br><br><br>   xNCL = 2.3<br>   yNCL = 3.0<br>   zNCL = 1e20<br>   <b>TOY_MODULE::mult77</b>(xNCL, yNCL, zNCL)  ; interface with f77 which calls f90<br>   print("zNCL="+zNCL)<br></div><div><br>=====<br></div><div>%> ncl toy_test.ncl<br><br>(0)    zNCL=6.9<br><br>==================<br></div><div>Hopefully, this is somewhat clear.<br><br></div><div>Good luck<br></div></div></div></div></div></div></div></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 11, 2018 at 3:47 PM, Michael Toy <span dir="ltr"><<a href="mailto:toy@ucar.edu" target="_blank">toy@ucar.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hello,<div><br></div><div>I am trying to call a fortran subroutine from an NCL script, and have followed the documentation for “WRAPIT”.  This is my first time trying it.  When I enter the following in NCL:</div><div>ncl 0> external MLT “./mult.so"</div><div><br></div><div>I get the error message:</div><div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">warning:An error occurred loading the external file ./mult.so, file not loaded</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">./mult.so: undefined symbol: mult_</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">warning:error at line 0</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div></div><div><br></div><div>I’m testing a simple subroutine which multiplies two numbers together.  My Fortran 90 code (mult.f90) is:</div><div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures"><br></span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">module module_mult</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">contains</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">subroutine mult(x,y,z)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">implicit none</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">real, intent(in) :: x,y</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">real, intent(out) :: z</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">z = x*y</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">end subroutine mult</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">end module module_mult</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255);min-height:15px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div></div><div><br></div><div>My “stub” file is:</div><div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">C NCLFORTSTART</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">      subroutine mult(x,y,z)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">      real x,y,z</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">C NCLEND</span></div></div><div><span style="font-variant-ligatures:no-common-ligatures"><br></span></div><div><br></div><div>When I run “WRAPIT mult.stub mult.f90” it seems to run successfully, and produces the file:</div><div>mult.so</div><div><br></div><div><br></div><div>I am running NCL version 6.4.0 on the following system:</div><div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)"><span style="font-variant-ligatures:no-common-ligatures">Linux x86_64 x86_64 x86_64 GNU/Linux</span></div></div><div><div><br class="m_8984324537255978221m_8796665186174588599webkit-block-placeholder"></div><div>I know this problem has come up in the NCL users’ forum before, but I’ve not seen how the issue gets resolved.  Your help would be appreciated.  Thanks.</div><div><br></div><div>Best regards,</div><div>Mike</div></div></div><br>______________________________<wbr>_________________<br>
ncl-talk mailing list<br>
<a href="mailto:ncl-talk@ucar.edu" target="_blank">ncl-talk@ucar.edu</a><br>
List instructions, subscriber options, unsubscribe:<br>
<a href="http://mailman.ucar.edu/mailman/listinfo/ncl-talk" rel="noreferrer" target="_blank">http://mailman.ucar.edu/mailma<wbr>n/listinfo/ncl-talk</a><br>
<br></blockquote></div><br></div>
</div></div><span id="m_8984324537255978221cid:591191DF-069F-45C3-B58B-A98052671890@fsl.noaa.gov"><toy_module.f90></span><span id="m_8984324537255978221cid:2C576284-66CA-4F88-B530-FFEE3FDF5B01@fsl.noaa.gov"><test.toy_<wbr>module.f90></span><span id="m_8984324537255978221cid:B3972DE6-276B-4FB1-934C-FF2E69554742@fsl.noaa.gov"><toy_mult7790.f></span><span id="m_8984324537255978221cid:7B8872CE-AF80-462E-9B32-32C5B7CC74FF@fsl.noaa.gov"><<wbr>toy_test.ncl></span></div></blockquote></div><br></div></div><br>______________________________<wbr>_________________<br>
ncl-talk mailing list<br>
<a href="mailto:ncl-talk@ucar.edu">ncl-talk@ucar.edu</a><br>
List instructions, subscriber options, unsubscribe:<br>
<a href="http://mailman.ucar.edu/mailman/listinfo/ncl-talk" rel="noreferrer" target="_blank">http://mailman.ucar.edu/<wbr>mailman/listinfo/ncl-talk</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Barry H. Lynn, Ph.D<div><div>Senior Lecturer,</div><div><div><span style="color:rgb(136,136,136)">The Institute of the Earth Science, </span><br style="color:rgb(136,136,136)"><span style="color:rgb(136,136,136)">The Hebrew University of Jerusalem, </span><br style="color:rgb(136,136,136)"><span style="color:rgb(136,136,136)">Givat Ram, Jerusalem 91904, Israel </span><br style="color:rgb(136,136,136)"></div><span style="color:rgb(136,136,136)">Tel: 972 547 231 170</span><br style="color:rgb(136,136,136)"><span style="color:rgb(136,136,136)">Fax: (972)-25662581</span></div></div><div><span style="color:rgb(136,136,136)"><br></span></div><div>C.E.O, Weather It Is, LTD<br>Weather and Climate Focus<br><a href="http://weather-it-is.com" target="_blank">http://weather-it-is.com</a><br>Jerusalem, Israel<br>Local: 02 930 9525<br>Cell: 054 7 231 170<br>Int-IS: x972 2 930 9525<br>US 914 432 3108<br></div></div></div>
</div>