1 / 6

TGCM Main

TIEGCM Lower Boundary Code Structure. TGCM Main. i nit Set gswm flags. i nit_lbc Allocate tlbc,ulbc,vlbc. r eadsource Read tlbc , ulbc , vlbc. lowbound Set Hough mode params. advance. a dvance (called by TGCM). addiag. dynamics. getgswm. l bc_gswm_addiag. r dgswm

vilina
Download Presentation

TGCM Main

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TIEGCM Lower Boundary Code Structure TGCM Main init Set gswm flags init_lbc Allocate tlbc,ulbc,vlbc readsource Read tlbc, ulbc, vlbc lowbound Set Hough mode params advance

  2. advance (called by TGCM) addiag dynamics getgswm lbc_gswm_addiag rdgswm Read gswm data file mkgswm Define gswm module data addiag ! ! Use GSWM lbc for geopotential height if requested: if (igetgswm > 0) then call lbc_gswm_addiag(z(1,lon0:lon1,lat0:lat1),lon0,lon1, lat0,lat1) endif ! ! If not using gswmlbc, add in tidal components: if (igetgswm <= 0) then ! ! z(1) = zb expt=cex p(ci*freq_semidi*dt*iter) do i=lon0,lon1 z(1,i,j) = real(zb(j)*bnd(i)*expt) enddo ! ! Add in effect of (1,1) tidal component to lbc expt = cexp(ci*.5*freq_semidi*dt*iter) do i=lon0,lon1 z(1,i,j) = z(1,i,j)+real(zb2(j)*bnd2(i)*expt) enddo endif ! igetgswm <= 0 ! ! Add background lower boundary of Z (zbound is in cons.F): z(1,lon0:lon1,j) = z(1,lon0:lon1,j)+zbound getgswm ! ! Get gswm migrating diurnal tide data: if (igswm_mi_di > 0) then if (istep==1) call rdgswm(gswm_mi_di_ncfile,'mi_di') call mkgswm(iyear,iday,int(secs),iprint,'mi_di') endif ! ! Get gswm migrating semi-diurnal tide data: if (igswm_mi_sdi > 0) then if (istep==1) call rdgswm(gswm_mi_sdi_ncfile,'mi_sdi') call mkgswm(iyear,iday,int(secs),iprint,'mi_sdi') endif ! ! Get gswm non-migrating diurnal tide data: if (igswm_nm_di > 0) then if (istep==1) call rdgswm(gswm_nm_di_ncfile,'nm_di') call mkgswm(iyear,iday,int(secs),iprint,'nm_di') endif ! ! Get gswm non-migrating semi-diurnal tide data: if (igswm_nm_sdi > 0) then if (istep==1) call rdgswm(gswm_nm_sdi_ncfile,'nm_sdi') call mkgswm(iyear,iday,int(secs),iprint,'nm_sdi') endif

  3. dynamics (called by advance) dt (update TN) duv (update U,V) lbc_gswm_dt lbc_gswm_duv dt if (igetgswm > 0) then call lbc_gswm_dt(tnlbc,lon0,lon1,lat0,lat1) else ! no gswm rstep = float(step) expt = cexp(ci*freq_semidi*rstep*iter) expt2 = cexp(ci*.5*freq_semidi*rstep*iter) endif ! do lat=lat0,lat1 ! ! Calculate lbc if gswm was not used (see above): if (igetgswm <= 0) then do i=lon0,lon1 tnlbc(i,lat) = real(tb(lat)*bnd(i)*expt)+tbound ! semidi tnlbc(i,lat) = tnlbc(i,lat)+real(tb2(lat)*bnd2(i)*expt2) ! diurnal enddo ! i=lon0,lon1 endif duv if (igetgswm> 0) then ! ! Use GSWM lbc: call lbc_gswm_duv(unlbc,vnlbc,unlbc_diag,vnlbc_diag, | lon0,lon1,lat,lev0,lev1,expt,expt2,expta) ! ! U,V bottom boundary (non-gswm): else ! non-gswm ! ! Semidiurnal tide: do i=lon0,lon1 unlbc(i) = real(ub(lat)*bnd(i)*expt) vnlbc(i) = real(vb(lat)*bnd(i)*expt) ! ! Diurnal tide: unlbc(i) = unlbc(i) + real(ub2(lat)*bnd2(i)*expt2) vnlbc(i) = vnlbc(i) + real(vb2(lat)*bnd2(i)*expt2) enddo ! i=lon0,lon1 endif ! gswm

  4. lbc_gswm_addiag (bndry.F) (called by addiag) ! GSWM migrating diurnal and semi-diurnal: if(igswm_mi_di == 1.and.igswm_mi_sdi == 1) then do j = lat0,lat1 do i=lon0,lon1 z(i,j) = gswm_mi_sdi_z(i,j) ! semidiurnal tide z(i,j) = z(i,j)+ gswm_mi_di_z(i,j) ! diurnal tide enddo enddo ! ! GSWM migrating semi-diurnal: elseif(igswm_mi_di == 0.and.igswm_mi_sdi == 1) then do j = lat0,lat1 do i=lon0,lon1 z(i,j) = gswm_mi_sdi_z(i,j) z(i,j) = z(i,j)+real(zb2(j)*bnd2(i)*expt2) enddo enddo ! ! GSWM migrating diurnal: elseif(igswm_mi_di == 1.and.igswm_mi_sdi == 0) then do j = lat0,lat1 do i=lon0,lon1 z(i,j) = real(zb(j)*bnd(i)*expt z(i,j) = z(i,j)+ gswm_mi_di_z(i,j enddo enddo ! ! No gswm: else do j = lat0,lat1 do i=lon0,lon1 z(i,j) = real(zb(j)*bnd(i)*expt) z(i,j) = z(i,j)+real(zb2(j)*bnd2(i)*expt2 enddo enddo endif ! ! GSWM non-migrating diurnal: if(igswm_nm_di == 1) then do j = lat0,lat1 do i=lon0,lon1 z(i,j) = z(i,j)+ gswm_nm_di_z(i,j) enddo enddo endif ! ! GSWM non-migrating semi-diurnal: if(igswm_nm_sdi == 1) then do j = lat0,lat1 do i=lon0,lon1 z(i,j) = z(i,j)+ gswm_nm_sdi_z(i,j) enddo enddo endif

  5. lbc_gswm_dt (bndry.F) (called by dt) ! ! GSWM migrating diurnal and semi-diurnal: if(igswm_mi_di== 1.and.igswm_mi_sdi == 1) then do lat=lat0,lat1 do i=lon0,lon1 tnlbc(i,lat) = gswm_mi_sdi_t(i,lat)+tbound tnlbc(i,lat) = tnlbc(I,lat)+ gswm_mi_di_t(i,lat) enddo! i=lon0,lon1 enddo! j=lat0,lat1 ! ! GSWM migrating semi-diurnal: elseif(igswm_mi_di== 0.and.igswm_mi_sdi == 1) then do lat=lat0,lat1 do i=lon0,lon1 tnlbc(i,lat) = gswm_mi_sdi_t(i,lat)+tbound tnlbc(i,lat) = tnlbc(i,lat)+ real(tb2(lat)*bnd2(i)*expt2) enddo! i=lon0,lon1 enddo ! j=lat0,lat1 ! ! GSWM migrating diurnal: elseif(igswm_mi_di== 1.and.igswm_mi_sdi == 0) then do lat=lat0,lat1 do i=lon0,lon1 tnlbc(i,lat) = real(tb(lat)*bnd(i)*expt)+tbound tnlbc(i,lat) = tnlbc(i,lat)+ gswm_mi_di_t(i,lat) enddo! i=lon0,lon1 enddo! j=lat0,lat1 else ! ! No gswm: do lat=lat0,lat1 do i=lon0,lon1 tnlbc(i,lat) = real(tb(lat)*bnd(i)*expt)+tbound tnlbc(i,lat) = tnlbc(i,lat)+ real(tb2(lat)*bnd2(i)*expt2) enddo! i=lon0,lon1 enddo! j=lat0,lat1 endif ! ! GSWM non-migrating diurnal: if(igswm_nm_di== 1) then do lat=lat0,lat1 do i=lon0,lon1 tnlbc(i,lat) = tnlbc(i,lat)+ gswm_nm_di_t(i,lat) enddo! i=lon0,lon1 enddo! j=lat0,lat1 endif ! ! GSWM non-migrating semi-diurnal: if(igswm_nm_sdi== 1) then do lat=lat0,lat1 do i=lon0,lon1 tnlbc(i,lat) = tnlbc(i,lat)+ gswm_nm_sdi_t(i,lat) enddo! i=lon0,lon1 enddo! j=lat0,lat1 endif

  6. lbc_gswm_duv (bndry.F) (called by duv) ! ! GSWM migrating diurnal and semi-diurnal: if(igswm_mi_di== 1.and.igswm_mi_sdi == 1) then do i=lon0,lon1 unlbc(i) = gswm_mi_sdi_u(i,lat) vnlbc(i) = gswm_mi_sdi_v(i,lat) unlbc(i) = unlbc(i) + gswm_mi_di_u(i,lat) vnlbc(i) = vnlbc(i) + gswm_mi_di_v(i,lat) unlbc_diag(:,i) = unlbc(i) enddo! i=lon0,lon1 ! ! GSWM migrating semi-diurnal: elseif(igswm_mi_di== 0.and.igswm_mi_sdi == 1) then do i=lon0,lon1 unlbc(i) = gswm_mi_sdi_u(i,lat) vnlbc(i) = gswm_mi_sdi_v(i,lat) unlbc(i) = unlbc(i) + real(ub2(lat)*bnd2(i)*expt2) vnlbc(i) = vnlbc(i) + real(vb2(lat)*bnd2(i)*expt2) unlbc_diag(:,i) = unlbc(i) enddo! i=lon0,lon1 ! ! GSWM migrating diurnal: elseif(igswm_mi_di== 1.and.igswm_mi_sdi == 0) then do i=lon0,lon1 unlbc(i) = real(ub(lat)*bnd(i)*expt) vnlbc(i) = real(vb(lat)*bnd(i)*expt) unlbc(i) = unlbc(i) + gswm_mi_di_u(i,lat) vnlbc(i) = vnlbc(i) + gswm_mi_di_v(i,lat) enddo! i=lon0,lon1 ! ! No gswm: else do i=lon0,lon1 unlbc(i) = real(ub(lat)*bnd(i)*expt) vnlbc(i) = real(vb(lat)*bnd(i)*expt) unlbc(i) = unlbc(i) + real(ub2(lat)*bnd2(i)*expt2 vnlbc(i) = vnlbc(i) + real(vb2(lat)*bnd2(i)*expt2) unlbc_diag(:,i) = unlbc(i) enddo! i=lon0,lon1 endif ! ! GSWM non-migrating diurnal: if(igswm_nm_di== 1) do i=lon0,lon1 unlbc(i) = unlbc(i) + gswm_nm_di_u(i,lat) vnlbc(i) = vnlbc(i) + gswm_nm_di_v(i,lat) enddo! i=lon0,lon1 endif ! ! GSWM non-migrating semi-diurnal: if(igswm_nm_sdi== 1) do i=lon0,lon1 unlbc(i) = unlbc(i) + gswm_nm_sdi_u(i,lat) vnlbc(i) = vnlbc(i) + gswm_nm_sdi_v(i,lat) enddo! i=lon0,lon1 endif

More Related