#define c_str(s) ('s\0') subroutine init_all implicit real(a-h,o-z),integer(i-n) c************************************************************************ include 'comm_para.h' include 'comm_main.h' include 'comm_new.h' include 'comm_data.h' include 'diffiso.h' include 'comm_tracer.h' include 'comm_nao.h' include 'comm_bio.h' include 'comm_tios.h' real inp_flt npten = MPTEN c...............getting input & output filenames from the command line call inout (ioin) c...............input model parameters. call model_input(npt,mbox) call model_memory (nxp, nyp, nz, npt) call make_iox (nxp, nyp, mask, iox, nlok, lok, nsponge, lsponge, * nrelax, lrelax, iglob, inx, iny) if (nrelax.gt.MAXSP) then print*,'increase MAXSP' stop endif call scaset (iox,xm,ym,xp,yp,f,emx,emy,cosl,cosli,emx2,emy2,tp,dx2i,dy2i,ycos) call ylat_degrees(npt,nxp,iox,ym,y_deg) call depth_init (npt, zin) call new_topo (nxp, nyp, nz, npt, zin, dzin, hin, nsig, sigma, dept, * h, nptk, nzi) call bndrys(npt,iox,tp,isxk,isyk,mask,h,nzi, * isk,iyk,lxxk,lyyk,lxyk,lyxk,snxk,snyk,lok, * lpbcwk,lpbcek,ifxk,ifpxk,ifyk,dept) call bndrys_new(npt,nzi,lxxk,lyyk,nzibx,nziby) c..............compute some geometry stuff call aarea_new(npt,nxp,nyp,nz,lxxk,lyyk,snxk,snyk,mask,iox,emx,emy, * area,basin,isk,nzi,h,isyk,lpbcwk,lpbcek,saxmk,saxpk,saymk,saypk, * tp,sxp,syp,sxm,sym,mbox) if (irest .eq. 0) then NEWRUN = .true. call init_rstrt (nxp, nyp, nz, npt, zin, tp) else NEWRUN = irest .ge. 3 .or. irest .lt. 0 if (irest.eq.1 .or. irest.eq.2) CALL TIOS_CNTRL (3, 1) call read_rstrt (nxp, nyp, nz, npt) endif c..............initialize Temperature/Salinity Climatology (for sponges): call clim_init(npt,nstart,hin,sigma,dzin,h, * hclim,tclim,sclim,dclim,pclim,tp,nsponge,lsponge) if (irest .eq. 0) then call h_init (npt, nz, nzi, nstart, h, hclim) call temp_init (npt,nz,nstart,t_in,t,tclim) call salt_init (npt,nz,nstart,s_in,sal,sclim) endif call situ_dens (npt, nz, nzi, t, sal, dens, h) call potn_dens (npt, nz, nzi, t, sal, pdens) if (diffiso_alpha.gt.0.or.initkmap.eq.5) then call slope(npt,pdens,dens,nz,nzi,h,lxxk,lyyk,lxyk,lyxk,snxk, * snyk,isyk,isk,lok,tp,lpbcwk,lpbcek,saxmk,saxpk,saymk,saypk,xmld) endif if (use_diffiso.or.itank.eq.1) call Kmap_init (npt, nz, nxp, nyp) c..............initialize Heat/EP forcing: if (use_ice) then call amlice_data_init(nstart,npt,nxp,nyp, * t, sst, cld, solr, sal, sss, prcp, nrelax, lrelax, nstep_pbl) if (use_dyice) then call init_dyice (nxp,nyp,ntrac_sur,npt,iox,xm,ym,delt) endif else call hflx_init (nstart,npt,nxp,nyp,t,sst,cld,solr,nrelax,lrelax) call ep_init (nstart, npt, sal, sss, prcp) endif call diff_init(npt,nz,iglob,mgrid) c..............initialize Wind forcing: tenso = enso_start + enso_scale * nstart tmonth = mod(tenso,12.) ! month of the year, [0,12) if (tmonth.lt.0) tmonth = tmonth + 12. if (inao.eq.1) tscl_anom = cos ( freq_nao*(tenso-1.5) ) call tau_init (nstart, npt, tscl_anom, dtx,dty, taux_anom,tauy_anom,tmonth) if (use_river) call river_init (npt,nxp,nyp,nz,nzi,xm,ym,iox,h) c..............initialize grad(H)/H: call gradH_init (nxp,nyp,npt, zin, gradH, dept, * saxpk,saypk,isk,tp,dx2i,dy2i,ycos,inx,iny,lxxk,lyyk) dt_sub = delt * D2SEC dnt = dt_sub * real(ncyc) dtmix = dt_sub * real(limp) dtbio = delt * 24. ! biology time step, in hours dtshap = dt_sub * real(nshapu) DLT_MIX = 2.0 * dtmix if (use_trac ) call tracer_input(npt,nz,ntimes,nstart,nstep) if (use_trac .or. use_bio) then call tracer_init(npt,nz,nzi,nstart,nxp,nyp,iox,tr,t,h,xm,ym,trclim) endif if (use_bio) then ibio = ntrac*npt*nz + 1 ibio1 = ntrac*npt*(nz+1) + 1 if (use_bio_old) then call BIOINI_old(TR(ibio),FTR(ibio1),ntrac_bio,NFLBIO,NZ,NZI,NPT, * KBIO,XZM,XZE,XPAR,XPARZE,XPARZM,FLXBIO,XLE,XLM,XLT,XLN) else call BIOINI(TR(ibio),FTR(ibio1),ntrac_bio,NFLBIO,NZ,NZI,NPT,KBIO,XPAR, * FPAR,FLXBIO,XLE,XLT,XLN,XZE,XZM) endif endif c..............initialize TIOS io-system call init_data_out (ftios, fbt, nxp, nyp, npt, nz, xm, ym, en) CALL TIOS_CNTRL (4, delt) c iday_new = int(nstart*delt) iday_curr = iday_new if (ibaro .ne. 0) then eps = bt_fac/dt_sub call init_baro (iglob,eps,nxp,nyp,nxyc,ncsk,iox,nbxk,lxxk, * nbyk,lyxk,alon,blon,alat,blat,xm,ym,dept,dep_max,gradH,adelt) if (irest .ne. 0) then call make_big (nxp,nyp,npt,psi,psin,inx,iny,isk,mask) call curlH (nxp,nyp,npt,psin,dept,dx2i,dy2i,ycos,inx,iny,ubar,vbar) endif endif istep = 0 i_baro_step = 0 i_slope_step = 0 i_mix_step = 0 largestep_count = 0 mix_count = 0 i_propag_step = 0 anom_fac_temp = inp_flt(c_str(Anom_fac_temp), 2.) anom_fac_trac = inp_flt(c_str(Anom_fac_trac), 2.) if (irest .le. 0) then call add_anom(npt,nxp,nyp,nz,nzi,xm,ym,iox,h,t,anom_fac_temp) if (ntrac.eq.1) then call add_anom(npt,nxp,nyp,nz,nzi,xm,ym,iox,h,tr,anom_fac_trac) endif endif call kmixinit return end