wiki:WindObjects

Version 4 (modified by ehansen, 13 years ago) ( diff )

Wind Objects

Description

As its name implies, the Wind object was originally created to simulate a stellar wind. However, the actual object is a little more generic. It can represent any continuous inflow condition that, by default, comes in from the left boundary of the domain. The Wind object allows for a simple interface for setting the inflow density, velocity, temperature, and magnetization. The object (if used) must be created during the ProblemModuleInit subroutine.


Object Attributes

   INTEGER, PARAMETER :: NOWAVE = 0, SQUAREWAVE = 1, SINEWAVE = 2

   TYPE WindDef
      INTEGER :: dir = 1
      INTEGER :: edge = 1
      REAL(KIND=qPREC) :: velocity = 0d0
      REAL(KIND=qPREC) :: density=1d0
      REAL(KIND=qPREC) :: temperature=1d0
      REAL(KIND=qPREC) :: B(3) = 0d0
      REAL(KIND=qPREC) :: period = 0d0
      REAL(KIND=qPREC) :: amplitude = 0d0
      INTEGER :: waveform = NOWAVE
      INTEGER :: Type = 0
      INTEGER :: iTracer = 0 
   END TYPE WindDef

The default values for density and temperature are both 1. The velocity and magnetization vectors are 0, and there is no wind tracer. To turn on a wind tracer, the value of iTracer needs to be initialized to a valid tracer index using the AddTracer routine. The dir and edge parameters define the direction of the wind and which boundary the wind comes from. For dir: the x, y, z directions are 1, 2, 3 respectively. For edge: the lower x, lower y, lower z, upper x, upper y, upper z boundaries are 1,2,3,4,5,6 respectively. Period, amplitude, and waveform are all parameters used for a velocity perturbation. Their default is 0 (i.e. no perturbation).


How to Use this Object

Firstly, the USE Winds statement will be required at the top of the module. Then, one just has to create the wind object and modify its default values as necessary (and potentially add a tracer field) as follows…

SUBROUTINE ProblemModuleInit()
  TYPE(WindDef), POINTER :: Wind

  CALL CreateWind(Wind) 

  Wind%density=10
  Wind%temperature=100
  Wind%B(:)=(/1d0, 0d0, 0d0/)
  Wind%velocity=1d5

  CALL AddTracer(Wind%iTracer, 'Wind Tracer')

END SUBROUTINE ProblemModuleInit

This set up is your most basic constant, magnetized wind coming from the left boundary with the specified parameters. Grids then will be initialized with the correct energy etc… before being passed into the various other grid initialization routines.

Note: See TracWiki for help on using the wiki.