<div>Hi Martin,</div><div><br></div><div>I understand it much better now that we only pass a pointer to the S/R FLT_BILINEAR.</div><div><br></div><div>I move all gradient-calculation codes from ptracer_integrate.F to flt_traj.F and add local</div><div>fields of _RS xA/yA of one follow your suggestions.  Now it works perfectly.</div><div><br></div><div>Now I have online- and offline-sampled pTracer values and differences seem unacceptable</div><div>for my purpose.  After double-check the c-grid coordinates I used in offline way (may offset</div><div>half grid length), I doubt that the instantaneous tracer outputs by diagnostics pkg (used for</div><div>offline sampling) are somewhat different from the tracer state sampled online.  One possible</div><div>reason is that the model use AB integrator and has three timesteps (not sure if it is relevant).</div><div>Another reason is that the output frequency is daily and the states may be defined exactly at</div><div>the beginning of the day or the mid-day.</div><div><br></div><div>In order to verify the differences, I just want to output the pTracer field just before Lagrangian</div><div>sampling (calling flt_bilinear S/R) in flt_traj.F.  I added the following codes:</div><div><div><b>       _BARRIER</b></div><div><b>       iRec = 1 + NINT( (myTime-startTime)/ PTRACERS_dumpFreq )</b></div><div><b>       CALL WRITE_REC_XYZ_RL('myPTracer',</b></div><div><b>      &    pTracer(1-OLx,1-OLy,1,1,1,9),iRec,myIter,myThid)</b></div><div><b>       _BARRIER</b></div></div><div>and make use of the predefined S/R write_rec_xyz_rl.  First, this reported an error of 'myPTracer.data'</div><div>file cannot be found.  After I created an empty file of 'myPTracer.data', the code reported an error:</div><div><div><b>    forrtl: File too large</b></div><div><b>    forrtl: severe (38): error during write, unit 9, file myPTracer.data</b></div></div><div>and the myPTracer.data is still 0 byte.  I hope to get a single mdsio-like myPTracer.data binary file (not</div><div>one file per tile).  Is this error caused by not open a file or not flush the buffer to file?  How to do it correctly?</div><div>Are the _BARRIER lines necessary to synchronize all processes to generate a single file?</div><div><sign signid="0"><div style="color:#909090;font-family:Arial Narrow;font-size:12px"><br><br>------------------</div><div style="font-size:14px;font-family:Verdana;color:#000;"><div> <font size="2">Best regards <br> <br>Yu-Kun Qian (钱钰坤) <br>Center for Monsoon and Environment Research</font> </div> <font size="2">Department of Atmospheric Sciences<br>School of Environmental Science and Engineering<font size="2"> <br> </font>Sun Yat-sen University <br>No. 135 Xingang West Road, Haizhu District <br>Guangzhou, 510275, P.R. China <br>Tel; 020-84115227 <br>Email: <a href="mailto:qianyk@mail2.sysu.edu.cn">qianyk@mail3.sysu.edu.cn</a> </font> 
<div> <font size="2"> </font> </div></div></sign></div><div> </div><div><includetail><div> </div><div> </div><div style="font:Verdana normal 14px;color:#000;"><div style="FONT-SIZE: 12px;FONT-FAMILY: Arial Narrow;padding:2px 0 2px 0;">------------------ 原始邮件 ------------------</div><div style="FONT-SIZE: 12px;background:#efefef;padding:8px;"><div id="menu_sender"><b>发件人:</b> "Martin Losch"<Martin.Losch@awi.de>;</div><div><b>发送时间:</b> 2018年6月14日(星期四) 晚上9:39</div><div><b>收件人:</b> "MITgcm Support"<mitgcm-support@mitgcm.org>; <wbr></div><div></div><div><b>主题:</b> Re: [MITgcm-support] Sample pTracer using flt package</div></div><div> </div><div style="position:relative;">Hi Qian,<br><br>I think I said before that I never used the flt-package, so I have no experience, how it actually works, but I’ll give ti a shot to answer you questions, see below:<br>> On 14. Jun 2018, at 15:16, 钱钰坤 <qianyk@mail3.sysu.edu.cn> wrote:<br>> <br>> Hi Martin,<br>> <br>> Thanks for your help.  I've compiled and run these codes successfully.  However, I get all zeros after the run.<br>> <br>> 1) You have suggested to modify the Lagrangian sampling code as (see previous email below):<br>> CALL FLT_BILINEAR  (ix,jy,ss, pTracer(1-Olx,1-Oly,1,1,1, iTracer),  kp,0,bi,bj,myThid)<br>> I just wonder why this line is not like:<br>> CALL FLT_BILINEAR  (ix,jy,ss, pTracer(1-Olx,1-Oly,1,bi,bj, iTracer),  kp,0,bi,bj,myThid)<br>> The index of 1 rather than bi/bj seems to works fine for sampling the tracer field.<br>in s/r flt_bilinear, the input “var” is defined as<br>      _RL var(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)<br>so as a full 5D field, but you are passing ptracers which is 6D. In Fortran 77 you actually only pass the address of the first element of a field, and this is what I suggested by pTracer(1-Olx,1-Oly,1,1,1, iTracer), so s/r flt_bilinear “sees” the address of where to start and assumes a 5D field (the last index varies most slowly). I assume that your bi/bj = 1 anyway, so the other form should have worked (as long as you not using the multi-thread-code where bi/bj can be > 1), but better do it right the first time. Passing the indices bi,bj tell s/r flt_bilinear, where to operate on in the input file “var”. E.g. in pkg/gchem/gchem_calc_tendency.F, cfc11_forcing assumes 3D input fields and you have to pass the proper pTracer(1-Olx,1-Oly,1,bi,bj, iTracer) fields. In Fortran90 things would be more transparent.<br>> <br>> 2) the predefined subroutines GAD_GRAD_X/Y in GAD package return tracer gradient much<br>> larger than expected.  I looked into the code and found that these subroutines calculate the<br>> product of gradient and face area of grid cell.  So I may need to divide the face area to get<br>> the right values of gradient.  Is this correct?  If so, I cannot just modify the subroutines because<br>> they may be called in other places.<br>Correct, it calculates a flux through the cell face, with area xA/yA<br>> <br>> 3) Subroutines GAD_GRAD_X/Y return non-zero values at the end of ptracer_integrate.F (this is<br>> verified by outputting pTrGrdx/y after calling GAD_GRAD_X/Y subroutines), however,<br>> in flt_traj.F, pTrGrdx/y becomes all zeros (this is verified by outputting pTrGrdx/y before calling<br>> FLT_BILINEAR).  Therefore, Lagrangian sampling gives all zero results.  Does this related to any<br>> execution sequence? Or any other possible reasons I cannot tell.<br><br>how do you define your xA/yA in flt_traj? in ptracers_integrate they are computed in s/r calc_adv_flow. In your case, because you don’t want your gradients multiplied with the area you could just define local fields<br>      _RS xA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)<br>      _RS yA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)<br>and set them to one. That would also solve your question (2).<br><br>Martin<br><br><br>> <br>> Many thanks.<br>> <br>> ------------------<br>> Best regards <br>> <br>> Yu-Kun Qian (钱钰坤) <br>> Center for Monsoon and Environment Research<br>> Department of Atmospheric Sciences<br>> School of Environmental Science and Engineering <br>> Sun Yat-sen University <br>> No. 135 Xingang West Road, Haizhu District <br>> Guangzhou, 510275, P.R. China <br>> Tel; 020-84115227 <br>> Email: qianyk@mail3.sysu.edu.cn<br>>  <br>>  <br>>  <br>>  <br>> ------------------ 原始邮件 ------------------<br>> 发件人: "Martin Losch"<Martin.Losch@awi.de>;<br>> 发送时间: 2018年6月14日(星期四) 晚上7:38<br>> 收件人: "MITgcm Support"<mitgcm-support@mitgcm.org>;<br>> 主题: Re: [MITgcm-support] Sample pTracer using flt package<br>>  <br>> Looks good to me.<br>> <br>> M.<br>> <br>> > On 14. Jun 2018, at 05:23, 钱钰坤 <qianyk@mail3.sysu.edu.cn> wrote:<br>> > <br>> > Hi all,<br>> > <br>> > Still along this line, I want to sample pTracer along Lagrangian trajectory using flt<br>> > package.  Now I'm able to sample pTracer itself and I want to sample its gradient<br>> > too.<br>> > <br>> > I add two arrays to store the gradient (vector) of pTracer in PTRACER_FIELDS.h:<br>> > _RL  pTrGrdx (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)<br>> > _RL  pTrGrdy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)<br>> > <br>> > Then I add the following lines at the end of ptracer_integrate.F to calculate the<br>> > gradient of the ninth tracer, which makes use of the predefined subroutines of<br>> > GAD_GRAD_X and GAD_GRAD_Y in GAD package:<br>> >      IF (iTracer .EQ. 9) THEN<br>> >        CALL GAD_GRAD_X(<br>> >   I            bi,bj,k,xA,pTracer(1-Olx,1-Oly,1,bi,bj,9),<br>> >   O            pTrGrdx(1-Olx,1-Oly,1,bi,bj),<br>> >   I            myThid)<br>> >        CALL GAD_GRAD_Y(<br>> >   I            bi,bj,k,yA,pTracer(1-Olx,1-Oly,1,bi,bj,9),<br>> >  O            pTrGrdy(1-Olx,1-Oly,1,bi,bj),<br>> >   I            myThid)<br>> >      ENDIF<br>> > <br>> > Finally, I modify the Lagrangian sampling code in flt_traj.F as:<br>> >        CALL FLT_BILINEAR  (ix,jy,uu,pTrGrdx(1-Olx,1-Oly,1,1,1),<br>> >   I               kp,1,bi,bj,myThid)<br>> >        CALL FLT_BILINEAR  (ix,jy,vv,pTrGrdy(1-Olx,1-Oly,1,1,1),<br>> >   I               kp,2,bi,bj,myThid)<br>> > so that the gradients are stored in the u/v samples of particles.<br>> > <br>> > I just want to make sure that this is OK.  I am aware of that gradX is defined<br>> > at u-point and gradY is defined at v-point.  So I guess this should be the best<br>> > way to get online sampled tracer gradient.<br>> > <br>> > <br>> > ------------------<br>> > Best regards <br>> > <br>> > Yu-Kun Qian (钱钰坤) <br>> > Center for Monsoon and Environment Research<br>> > Department of Atmospheric Sciences<br>> > School of Environmental Science and Engineering <br>> > Sun Yat-sen University <br>> > No. 135 Xingang West Road, Haizhu District <br>> > Guangzhou, 510275, P.R. China <br>> > Tel; 020-84115227 <br>> > Email: qianyk@mail3.sysu.edu.cn<br>> >  <br>> >  <br>> >  <br>> >  <br>> > ------------------ 原始邮件 ------------------<br>> > 发件人: "qianyk"<qianyk@mail3.sysu.edu.cn>;<br>> > 发送时间: 2018年6月2日(星期六) 晚上7:12<br>> > 收件人: "mitgcm-support"<mitgcm-support@mitgcm.org>;<br>> > 主题: 回复: [MITgcm-support] Sample pTracer using flt package<br>> >  <br>> > Hi Martin,<br>> > <br>> > Thanks very much for your suggestions.  I can sample the value of ptracer online now.<br>> > <br>> > However, there are considerable differences between online-sampled and offline-sampled<br>> > values.  I've doubted about the results of my offline-sampling program and that is why I<br>> > insist to get the online results to verify that.  Since I have to also sample the gradient of<br>> > the tracer, there are more questions follow this line.<br>> > <br>> > For a quick solution, I hope to compute the tracer gradient online and then sample the<br>> > gradient field exactly the same way as I sample the tracer field (just passing the pointer<br>> > of the gradient to the subroutine FLT_BILINEAR).  However, I've no idea how and where<br>> > to do this.  I've found many diagnostics in available_diagnostics.log related to the tracer<br>> > itself (UTRAC01, ADVrTr01, ...) which could be modified slightly to be the tracer gradient.<br>> > I just wonder if this is the best way to do get Lagrangian sampling of tracer gradient.<br>> > <br>> > From a fundamental way, I just want to figure out the differences in the programs.  The<br>> > tracer field is output as MDSIO format.  As MITgcm uses C-grid, should the position of the<br>> > lower-left-corner value of the tracer be exactly zero, or be DXC (DYC), or be DXC/2 (DYC/2)?<br>> > I think this tiny differences in position will cause considerable sampled tracer value if the<br>> > gradient is large.<br>> > <br>> > I also set north and east wall boundaries so the domain is closed (the eastmost Nx and<br>> > northmost Ny grid points are all set to the undefined value of 0).  Could the Lagrangian<br>> > particle get into the cell of these grid points or they just stay within [1 Nx-1]*[1 Ny-1]<br>> > grid points?  More specifically, what are the upper and lower bounds of position for a<br>> > Lagrangian particle?<br>> > <br>> > Thanks again.<br>> > <br>> > <br>> > <br>> > ------------------<br>> > Best regards <br>> > <br>> > Yu-Kun Qian (钱钰坤) <br>> > Center for Monsoon and Environment Research<br>> > Department of Atmospheric Sciences<br>> > School of Environmental Science and Engineering <br>> > Sun Yat-sen University <br>> > No. 135 Xingang West Road, Haizhu District <br>> > Guangzhou, 510275, P.R. China <br>> > Tel; 020-84115227 <br>> > Email: qianyk@mail3.sysu.edu.cn<br>> >  <br>> >  <br>> >  <br>> >  <br>> > ------------------ 原始邮件 ------------------<br>> > 发件人: "Martin Losch"<Martin.Losch@awi.de>;<br>> > 发送时间: 2018年6月1日(星期五) 晚上7:25<br>> > 收件人: "MITgcm Support"<mitgcm-support@mitgcm.org>;<br>> > 主题: Re: [MITgcm-support] Sample pTracer using flt package<br>> >  <br>> > Hi Qian,<br>> > <br>> > I think you can do it that way.<br>> > You need to include the ptracer variables at the beginning of the routine like this:<br>> > #ifdef ALLOW_PTRACERS<br>> > #include "PTRACERS_SIZE.h"<br>> > #include “PTRACERS_FIELDS.h"<br>> > #endif<br>> > <br>> > and it’s always a good idea to bracket pkg-specific code by CPP-flags:<br>> > #ifdef ALLOW_PTRACERS<br>> >       … your code ...<br>> > #endif<br>> > <br>> > I think you need to say<br>> > CALL FLT_BILINEAR  (ix,jy,ss, pTracer(1-Olx,1-Oly,1,1,1, iTracer),  kp,0,bi,bj,myThid)<br>> > to pass the approriate pointer to FLT_BILINEAR<br>> > <br>> > Martin<br>> > > On 1. Jun 2018, at 12:19, 钱钰坤 <qianyk@mail3.sysu.edu.cn> wrote:<br>> > > <br>> > > Hi all,<br>> > > <br>> > > I've inserted an passive tracer (using ptracer package) and deployed<br>> > > Lagrangian particles (using flt package) simultaneously into a dynamic flow.<br>> > > I wanted to sample the tracer value along each Lagrangian float but I only<br>> > > found the following five lines of code in flt_traj.F:<br>> > > <br>> > > CALL FLT_BILINEAR  (ix,jy,uu,uVel,  kp,1,bi,bj,myThid)<br>> > > CALL FLT_BILINEAR  (ix,jy,vv,vVel,  kp,2,bi,bj,myThid)<br>> > > CALL FLT_BILINEAR2D(ix,jy,pp,etaN,     0,bi,bj,myThid)<br>> > > CALL FLT_BILINEAR  (ix,jy,tt,theta, kp,0,bi,bj,myThid)<br>> > > CALL FLT_BILINEAR  (ix,jy,ss,salt,  kp,0,bi,bj,myThid)<br>> > > <br>> > > which means the flt can only sample the basic flow states (u, v, eta, theta, and salt).<br>> > > <br>> > > I wonder if there is an easy way to achieve this by modifying the code slightly as:<br>> > > <br>> > > CALL FLT_BILINEAR  (ix,jy,ss, pTracer(, , , , , iTracer),  kp,0,bi,bj,myThid)<br>> > > <br>> > > and using the result to replace the salt which I do not care about?<br>> > > <br>> > > If yes, how to modify the #include or variable declarations at the beginning of flt_traj.F?<br>> > > <br>> > > Many thanks.<br>> > > <br>> > > <br>> > > ------------------<br>> > > Best regards <br>> > > <br>> > > Yu-Kun Qian (钱钰坤) <br>> > > Center for Monsoon and Environment Research<br>> > > Department of Atmospheric Sciences<br>> > > School of Environmental Science and Engineering <br>> > > Sun Yat-sen University <br>> > > No. 135 Xingang West Road, Haizhu District <br>> > > Guangzhou, 510275, P.R. China <br>> > > Tel; 020-84115227 <br>> > > Email: qianyk@mail3.sysu.edu.cn<br>> > >  <br>> > >  <br>> > > _______________________________________________<br>> > > MITgcm-support mailing list<br>> > > MITgcm-support@mitgcm.org<br>> > > http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support<br>> > <br>> > _______________________________________________<br>> > MITgcm-support mailing list<br>> > MITgcm-support@mitgcm.org<br>> > http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support<br>> > _______________________________________________<br>> > MITgcm-support mailing list<br>> > MITgcm-support@mitgcm.org<br>> > http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support<br>> <br>> _______________________________________________<br>> MITgcm-support mailing list<br>> MITgcm-support@mitgcm.org<br>> http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support<br>> _______________________________________________<br>> MITgcm-support mailing list<br>> MITgcm-support@mitgcm.org<br>> http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support<br><br>_______________________________________________<br>MITgcm-support mailing list<br>MITgcm-support@mitgcm.org<br>http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support<br></div></div><!--<![endif]--></includetail></div>