-
Poulet Camille authored
FishNutrient Influx(N,P) for death before reproduction, death after reproduction and survival after reproduction
b05a5d85
/**
* patrick.lambert
* @author Patrick Lambert
* @copyright Copyright (c) 2018, Irstea
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package species;
import species.DiadromousFish.Gender;
import species.DiadromousFish.Stage;
/**
*
*/
public class FishNutrient {
private double aLWfemalePre = 0.0221; // param�tre "a" de la relation taille/poids avec Lt en cm
private double bLWfemalePre = 2.8147; // param�tre "b" de la relation taille/poids
private double GSIfemalePre =.15;
private double aLWmalePre = 0.0221; // param�tre "a" de la relation taille/poids avec Lt en cm
private double bLWmalePre = 2.8147; // param�tre "b" de la relation taille/poids
private double GSImalePre =.07;
// Si on ne possède pas wT post reproduction
/**
* param�tre "a" de la relation taille/poids avec Lt en cm
*/
private double aLWfemalePost = 0.; // param�tre "a" de la relation taille/poids avec Lt en cm
private double bLWfemalePost = 0.; // param�tre "b" de la relation taille/poids
private double GSIfemalePost=0.10;
private double aLWmalePost = 0.; // param�tre "a" de la relation taille/poids avec Lt en cm
private double bLWmalePost = 0.; // param�tre "b" de la relation taille/poids
private double GSImalePost =.07;
//Si on possede WT post reproduction
private double CoeffLossWeight = 0.;
//Valeurs de Haskell pour A. sapidissima -- A rechercher pour Alosa alosa
private double compoNpreMale = 2.921;
private double compoPpreMale = 0.662;
private double compoNpreFemale = 2.917;
private double compoPpreFemale = 0.725;
private double compoNpostMale = 2.790 ;
private double compoPpostMale = 0.961;
private double compoNpostFemale = 3.216 ;
private double compoPpostFemale = 0.997;
private double compoNoocyte =0.0;
private double compoNsperm =0.0;
private double compoPoocyte =0.0;
private double compoPsperm =0.0;
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
/**
*
*/
public FishNutrient() {
// TODO Auto-generated constructor stub
}
/**
* compute the N and P fluxes for a single fish (in the super individual)
* that dies after spawning (gametes expelling)
* @param fish
*/
public double[] computeInportNPforDeathBeforeSpawning(DiadromousFish fish) {
double totalWeightPre;
double [] inportNP = new double[2];
inportNP[0] = 0;
inportNP[1] = 0;
if (fish.getStage()== Stage.MATURE) {
if(fish.getGender()== Gender.FEMALE) {
totalWeightPre = aLWfemalePre * Math.pow(fish.getLength(), bLWfemalePre);
//totalWeightPost = totalWeightPre * (1-GSIfemalePost)+ totalWeightPost * GSIfemalePost * CoeffLossWeight
inportNP[0] = totalWeightPre * compoNpreFemale;
inportNP[1] = totalWeightPre * compoPpreFemale;
}
else if (fish.getGender()== Gender.MALE) {
totalWeightPre = aLWmalePre * Math.pow(fish.getLength(), bLWmalePre);
//totalWeightPost = totalWeightPre * (1-GSImalePost)+ totalWeightPost * GSImalePost * CoeffLossWeight
inportNP[0] = totalWeightPre * compoNpreMale;
inportNP[1] = totalWeightPre * compoPpreMale;
}
else {
totalWeightPre= Double.NaN;
inportNP[0] = 0.;
inportNP[1] = 0;
}
}
return inportNP;
}
public double[] computeInportNPforDeathAfterSpawning(DiadromousFish fish) {
double totalWeightPre, totalWeightPost;
double[] inportNP = new double[2]; //Pour faire un tableau deux colonnes, N et P
inportNP[0] = 0.;
inportNP[1] = 0.;
if (fish.getStage() == Stage.MATURE) {
if (fish.getGender() == Gender.FEMALE ) {
totalWeightPre = aLWfemalePre * Math.pow(fish.getLength(), bLWfemalePre);
totalWeightPost = aLWfemalePost * Math.pow(fish.getLength(), bLWfemalePost);
//totalWeightPost = totalWeightPre * (1-GSIfemalePost)+ totalWeightPost * GSIfemalePost * CoeffLossWeight
inportNP[0] = totalWeightPost * compoNpostFemale + (totalWeightPre - totalWeightPost) * compoNoocyte;
inportNP[1] = totalWeightPost * compoPpostFemale + (totalWeightPre - totalWeightPost) * compoPoocyte;
}
else if (fish.getGender() == Gender.MALE) {
totalWeightPre = aLWmalePre * Math.pow(fish.getLength(), bLWmalePre);
totalWeightPost = aLWmalePost * Math.pow(fish.getLength(), bLWmalePost);
//totalWeightPost = totalWeightPre * (1-GSImalePost)+ totalWeightPost * GSImalePost * CoeffLossWeight
inportNP[0] = totalWeightPost * compoNpostMale + (totalWeightPre - totalWeightPost) * compoNsperm;
inportNP[1] = totalWeightPost * compoPpostMale + (totalWeightPre - totalWeightPost) * compoPsperm;
}
else {
totalWeightPre = Double.NaN;
totalWeightPost = 0.;
inportNP[0]=0.;
inportNP[1]=0.;
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
}
}
return inportNP;
}
public double [] computeInportNPforSurvivalAfterSpawning(DiadromousFish fish) {
double totalWeightPre, totalWeightPost;
double[]inportNP = new double [2];
inportNP[0]= 0;
inportNP[1] = 0;
if (fish.getStage()== Stage.MATURE) {
if (fish.getGender()==Gender.FEMALE){
totalWeightPre = aLWfemalePre * Math.pow(fish.getLength(), bLWfemalePre);
totalWeightPost = aLWfemalePost * Math.pow(fish.getLength(), bLWfemalePost);
//totalWeightPost = totalWeightPre * (1-GSImalePost)+ totalWeightPost * GSImalePost * CoeffLossWeight
inportNP[0] = (totalWeightPre - totalWeightPost)* compoNoocyte;
inportNP[1] = (totalWeightPre - totalWeightPost)* compoPoocyte;
}
else if (fish.getGender()== Gender.MALE) {
totalWeightPre = aLWfemalePre * Math.pow(fish.getLength(), bLWmalePre);
totalWeightPost = aLWfemalePost * Math.pow(fish.getLength(), bLWmalePost);
//totalWeightPost = totalWeightPre * (1-GSImalePost)+ totalWeightPost * GSImalePost * CoeffLossWeight
inportNP[0] = (totalWeightPre - totalWeightPost)* compoNsperm;
inportNP[1] = (totalWeightPre - totalWeightPost)* compoPsperm;
}
else {
totalWeightPre= Double.NaN;
totalWeightPost = 0.;
inportNP[0] = 0.;
inportNP[1] = 0;
}
}
return inportNP;
}
}