Is it possible in ROMS to apply Atmospheric Pressure as a body force?
Are there any current CPP options in cppdefs.h to do this?
Applying Atm. Pressure as a body force
Atmospheric pressure as a body force
Yes, you can apply Atm. pressure as a body force.
First, you need to include Atm. pressure in your netcdf forcing file. For example, you can edit frc_bulk.cdl in order to create forcing file. In cppdefs.h you need to undef ANA_PAIR.
Elad
First, you need to include Atm. pressure in your netcdf forcing file. For example, you can edit frc_bulk.cdl in order to create forcing file. In cppdefs.h you need to undef ANA_PAIR.
Elad
Atmospheric pressure forcing can be easily included into the pressure gradient routine without
messing with body-force-type algorithm. As the matter of fact, any pressure gradient force
calculation algorithm involves (explicitly or implicitly) vertical integration of density field from
surface to the current depth z. This integration initializes pressure (or pressure gradient) at
surface as ZERO and then, starting from it, density (or density gradient) is integrated
downward. It is just sufficient to replace that ZERO with correct atmospheric pressure
(or pressure gradient) that is it: ROMS pressure gradient algorithm will do the rest: propagate
this forcing throughout the whole water column.
There are essentially two families pressure gradient routines currently in use in ROMS:
prsgrd32.F (without A)
and
prsgrd32AC1.F (amongh others, "A" stands for "alternative")
The "A" version calculates pressure explicitly, so you find loop where pressure is initialized
and insert atmospheric pressure there:
do i=istrU-1,iend
P(i,j,N)=g*z_w(i,j,N) + GRho*( rho(i,j,N)
& +0.5*(rho(i,j,N)-rho(i,j,N-1))*(z_w(i,j,N)-z_r(i,j,N))
& /(z_r(i,j,N)-z_r(i,j,N-1)) )*(z_w(i,j,N)-z_r(i,j,N))
enddo
do k=N-1,1,-1
do i=istrU-1,iend
P(i,j,k)=P(i,j,k+1)+HalfGRho*( (rho(i,j,k+1)+rho(i,j,k)) .........
in the upper loop: g*z_w(i,j,N) is contibution due to barotropic mode free surface displacement, etc... Just ADD in atmospheric pressure here, within this loop and
nowhere else.
The "non-A" (that also include pevious algorithm, such as standard and weighted jacobian)
versions calcucate horizontal density gradient first and then integrate it vertically. So you
have to compute atmospheric pressure gradient first (in BOTH directions) and then add it
into the place in the code where contribution due to free-surface disturbance is computed.
The atmospheric pressure gradient is then propagated downward naturally by the vertical
integration algorithm.
messing with body-force-type algorithm. As the matter of fact, any pressure gradient force
calculation algorithm involves (explicitly or implicitly) vertical integration of density field from
surface to the current depth z. This integration initializes pressure (or pressure gradient) at
surface as ZERO and then, starting from it, density (or density gradient) is integrated
downward. It is just sufficient to replace that ZERO with correct atmospheric pressure
(or pressure gradient) that is it: ROMS pressure gradient algorithm will do the rest: propagate
this forcing throughout the whole water column.
There are essentially two families pressure gradient routines currently in use in ROMS:
prsgrd32.F (without A)
and
prsgrd32AC1.F (amongh others, "A" stands for "alternative")
The "A" version calculates pressure explicitly, so you find loop where pressure is initialized
and insert atmospheric pressure there:
do i=istrU-1,iend
P(i,j,N)=g*z_w(i,j,N) + GRho*( rho(i,j,N)
& +0.5*(rho(i,j,N)-rho(i,j,N-1))*(z_w(i,j,N)-z_r(i,j,N))
& /(z_r(i,j,N)-z_r(i,j,N-1)) )*(z_w(i,j,N)-z_r(i,j,N))
enddo
do k=N-1,1,-1
do i=istrU-1,iend
P(i,j,k)=P(i,j,k+1)+HalfGRho*( (rho(i,j,k+1)+rho(i,j,k)) .........
in the upper loop: g*z_w(i,j,N) is contibution due to barotropic mode free surface displacement, etc... Just ADD in atmospheric pressure here, within this loop and
nowhere else.
The "non-A" (that also include pevious algorithm, such as standard and weighted jacobian)
versions calcucate horizontal density gradient first and then integrate it vertically. So you
have to compute atmospheric pressure gradient first (in BOTH directions) and then add it
into the place in the code where contribution due to free-surface disturbance is computed.
The atmospheric pressure gradient is then propagated downward naturally by the vertical
integration algorithm.