#include "CPP_OPTIONS.h" subroutine smooth_inv_forcing_gen(startrec, endrec, genmask, & xx_gen_file, xx_genSMmR_file, xx_genREF_file, & xx_gen_dummy, xx_genSMmR_dummy, mythid) IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "GRID.h" #include "PARAMS.h" #ifdef ALLOW_CTRL #include "tamc.h" #include "ctrl.h" #include "optim.h" #include "ctrl_dummy.h" #endif #ifdef ALLOW_COST #include "ecco_cost.h" #endif #include "DYNVARS.h" #include "smooth_inv.h" integer mythid,ilgen,enreg_cur _RL tmp0s(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RL xxgen2D(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RL xxgen2DREF(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RL genmask(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nR,nSx,nSy) _RL xx_gen_dummy, xx_genSMmR_dummy character*(80) fnamegen character*(80) xx_gen_file, xx_genSMmR_file character*(80) xx_genREF_file integer bi,bj, i,j, itlo,ithi, jtlo,jthi integer startrec,endrec integer nrec c == external functions == integer ilnblnk external ilnblnk #ifdef ALLOW_SMOOTH_INV jtlo = mybylo(mythid) jthi = mybyhi(mythid) itlo = mybxlo(mythid) ithi = mybxhi(mythid) ilgen=ilnblnk( xx_gen_file ) write(xx_genSMmR_file(1:80),'(2a,i10.10)') & xx_gen_file(1:ilgen), '.smooth.',optimcycle write(xx_genREF_file(1:80),'(2a)') & xx_gen_file(1:ilgen), '.ref' nrec=endrec-startrec+1 do enreg_cur=1,nrec C read control vector ilgen=ilnblnk( xx_gen_file ) write(fnamegen(1:80),'(2a,i10.10)') & xx_gen_file(1:ilgen), '.', optimcycle call active_read_xy_loc( fnamegen, xxgen2D, enreg_cur, & .false.,.false., optimcycle, & mythid, xx_gen_dummy) C pass it through the correlation filter call smooth_correl2D(xxgen2D,genmask,1,mythid) C substract the reference field call mdsreadfield(xx_genREF_file,32,'RL',1, & xxgen2DREF, enreg_cur, mythid) do bj = jtlo,jthi do bi = itlo,ithi do j = 1-oly,sny+oly do i = 1-olx,snx+olx xxgen2D(i,j,bi,bj) = xxgen2D(i,j,bi,bj) - xxgen2DREF(i,j,bi,bj) tmp0s(i,j,bi,bj) = 0. enddo enddo enddo enddo C save into file for cost computation c ilgen=ilnblnk( xx_genSMmR_file ) c write(fnamegen(1:80),'(2a,i10.10)') c & xx_genSMmR_file(1:ilgen), '.', optimcycle c call active_write_xy( fnamegen, xxgen2D, enreg_cur, c & optimcycle, mythid, xx_genSMmR_dummy) call active_write_xy( xx_genSMmR_file, xxgen2D, enreg_cur, & optimcycle, mythid, xx_genSMmR_dummy) c write(fnamegen(1:80),'(3a,i10.10)') c & 'ad',xx_genSMmR_file(1:ilgen),'.',optimcycle ilgen=ilnblnk( xx_genSMmR_file ) write(fnamegen(1:80),'(2a,i10.10)') & 'ad',xx_genSMmR_file(1:ilgen) call mdswritefield(fnamegen,ctrlprec,.FALSE.,'RL', & 1, tmp0s, enreg_cur, optimcycle, mythid) enddo #endif end